package com.dick.base.model;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dick.base.session.dto.UserBaseInfo;
import com.dick.base.session.util.SessionUtil;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 材料卷表
 */
@TableName("business_roll")
@Data
public class BusinessRoll {

    /**
     * 可用
     */
    public static final Integer STATUS_AVAILABLE = 10;
    /**
     * 使用中
     */
    public static final Integer STATUS_USING = 20;
    /**
     * 不可用（已用光）
     */
    public static final Integer STATUS_RUN_OUT = 100;

    @TableId()
    private Long id;

    /**
     * 批号，长度限制32
     */
    private String batchNumber;
    /**
     * 名称，长度限制0~32
     */
    private String name;
    /**
     * 初始重量，decimal类型，单位：公斤
     */
    private BigDecimal initWeight;
    /**
     * 当前剩余重量，decimal类型，单位：kg
     */
    private BigDecimal balanceWeight;
    /**
     * 单价，decimal类型，单位：元/kg
     */
    private BigDecimal price;
    /**
     * 总价，decimal类型，单位：元
     */
    private BigDecimal totalPrice;
    /**
     * 购买日期
     */
    private LocalDate purchaseDate;
    /**
     * 该卷状态：10-空闲可用 20-使用中 100-已用光，不可再被使用
     */
    private Integer status;
    /**
     * 材质，长度限制0~32
     */
    private String material;
    /**
     * 厚度，长度限制0~32，单位mm
     */
    private String thickness;
    /**
     * 宽度，int类型，单位mm
     */
    private Integer width;
    /**
     * 当前使用者id，只有status=20时有效
     */
    private Long userId;
    /**
     * 卷信息id
     */
    private Long infoId;

    private LocalDateTime updateTime;
    private LocalDateTime createTime;

    /**
     * 是否可剪板
     * @return
     */
    public Boolean getCanCut() {
        if (STATUS_USING.equals(status)) {
            UserBaseInfo baseInfo = SessionUtil.currentUser();
            if (baseInfo != null) {
                Long userId = baseInfo.getId();
                return userId.equals(this.getUserId());
            }
        }
        return Boolean.FALSE;
    }

    /**
     * 是否可退板
     * @return
     */
    public Boolean getCanWithdraw() {
        return getCanCut();
    }
}
